package com.kclm.se.util;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class OrderIds {

	// 属性
	private static int seq = 0;
	private static DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");

	/**************
	 * 生成订单号，规则如下： 由年月日时分秒+4位数字组成，这4位数组从0001开始编号，一直到9999， 1秒内不能超过9999个订单。
	 * 在同一个秒内，这4位数字依次递增，不能重复，到下一秒时，重新从0001开始编号。【算法请自行实现】
	 * 
	 * @return
	 */
	public static String generateId() {
		// 获取当前系统时间
		LocalDateTime ldt = LocalDateTime.now(); // Date now = new Date();
		int second = ldt.getSecond();
		// 判断
		if (seq > 9999) {
			// seq要清0
			seq = 0;
			// 如果此时刻的秒钟与上面生成时的秒钟 处在一样的位置，就应该等待
			while (LocalDateTime.now().getSecond() == second) {
				// 空跑...

			}
		}
		// Calendar now = Calendar.getInstance();
		StringBuilder builder = new StringBuilder();
		//更新ldt
		ldt = LocalDateTime.now();
		String result = dtf.format(ldt);
		builder.append(result);
		// 再拼接序号
		builder.append(String.format("%04d", seq)); //
		seq++;
		//
		return builder.toString();
	}

	public static void main(String[] args) {
		for (int i = 0; i < 10100; i++) {
			String id = generateId();
			System.out.println(id);
		}
	}
}
